/* =============================================================
 * enumFactory.js v1.0.0
 * =============================================================
 * Original written by Ysy
 * =============================================================
 * Date 15/06/2020
 * ============================================================ */

export default class EnumFactory {
  constructor(arr) {
    let typeArr = []

    if (!Array.isArray(arr)) return

    arr.map(element => {
      if (element.code !== 0 && (!element.code || !element.name)) return
      // 保存code值组成的数组，方便A.getName(name)类型的调用
      typeArr.push(element.code)
      // 根据code生成不同属性值，以便A.B.name类型的调用
      this[element.code] = element
    })

    // 保存源数组
    this.arr = arr
    this.typeArr = typeArr
  }

  // 根据code得到对象
  valueOf(code) {
    return this.arr[this.typeArr.indexOf(code)]
  }

  // 根据code获取name值
  getNameByCode(code,language) {
    let prop = this.valueOf(code)
    if (!prop) return

    return language === 'zh-CN' ? prop.name : prop.nameEn
  }

  // 返回源数组
  getValues() {
    return this.arr
  }
}
